package fr.thelem.gestiondemandesthelem.dao.model;

import static javax.persistence.CascadeType.PERSIST;

import java.io.Serializable;
import java.util.Collection;
import java.util.HashSet;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;

/**
 * Entity implementation class for Entity: Etape
 * 
 */
@Entity
@Table(name = "CD_ETAPE")
public class CDEtapeEntity implements Serializable {

    /** Attribut serialVersionUID */
    private static final long serialVersionUID = 1L;
    @Id
    @Column(name = "IDENTIFIANT_CD_ETAPE", nullable = false)
    @GeneratedValue
    private int identifiantCDEtape;

    @Column(name = "DESCRIPTION_CD_ETAPE")
    private String descriptionCDEtape;

    @Column(name = "NOM_CD_ETAPE", unique = true)
    private String nomCDEtape;

    @ManyToMany
    @JoinTable(name = "LIER", joinColumns = {@JoinColumn(name = "IDENTIFIANT_CD_ETAPE")}, inverseJoinColumns = {@JoinColumn(name = "IDENTIFIANT_CD_PARAMETRE_ETAPE")})
    private Collection<CDParametreEtapeEntity> CDParametresEtapeCDEtape;

    @ManyToMany(cascade = {PERSIST}, mappedBy = "CDEtapesCDDemande")
    private Collection<CDDemandeEntity> CDDemandesCDEtape;

    @OneToMany(cascade = {PERSIST}, mappedBy = "CDEtapeCPEtape")
    private Collection<CPEtapeEntity> CPEtapesCDEtape;

    /**
     * Constructeur
     */
    public CDEtapeEntity() {
        super();
        this.CDParametresEtapeCDEtape = new HashSet<CDParametreEtapeEntity>();
        this.CDDemandesCDEtape = new HashSet<CDDemandeEntity>();
        this.CPEtapesCDEtape = new HashSet<CPEtapeEntity>();
    }

    /**
     * Accesseur de identifiantCDEtape
     * 
     * @return le identifiantCDEtape
     */
    public int getIdentifiantCDEtape() {
        return identifiantCDEtape;
    }

    /**
     * Affectation de identifiantCDEtape
     * 
     * @param identifiantCDEtape identifiantCDEtape à affecter
     */
    public void setIdentifiantCDEtape(int identifiantCDEtape) {
        this.identifiantCDEtape = identifiantCDEtape;
    }

    /**
     * Accesseur de descriptionCDEtape
     * 
     * @return le descriptionCDEtape
     */
    public String getDescriptionCDEtape() {
        return descriptionCDEtape;
    }

    /**
     * Affectation de descriptionCDEtape
     * 
     * @param descriptionCDEtape descriptionCDEtape à affecter
     */
    public void setDescriptionCDEtape(String descriptionCDEtape) {
        this.descriptionCDEtape = descriptionCDEtape;
    }

    /**
     * Accesseur de nomCDEtape
     * 
     * @return le nomCDEtape
     */
    public String getNomCDEtape() {
        return nomCDEtape;
    }

    /**
     * Affectation de nomCDEtape
     * 
     * @param nomCDEtape nomCDEtape à affecter
     */
    public void setNomCDEtape(String nomCDEtape) {
        this.nomCDEtape = nomCDEtape;
    }

    /**
     * Accesseur de cDParametresEtapeCDEtape
     * 
     * @return le cDParametresEtapeCDEtape
     */
    public Collection<CDParametreEtapeEntity> getCDParametresEtapeCDEtape() {
        return CDParametresEtapeCDEtape;
    }

    /**
     * Affectation de cDParametresEtapeCDEtape
     * 
     * @param cDParametresEtapeCDEtape cDParametresEtapeCDEtape à affecter
     */
    public void setCDParametresEtapeCDEtape(Collection<CDParametreEtapeEntity> cDParametresEtapeCDEtape) {
        CDParametresEtapeCDEtape = cDParametresEtapeCDEtape;
    }

    /**
     * Accesseur de cDDemandesCDEtape
     * 
     * @return le cDDemandesCDEtape
     */
    public Collection<CDDemandeEntity> getCDDemandesCDEtape() {
        return CDDemandesCDEtape;
    }

    /**
     * Affectation de cDDemandesCDEtape
     * 
     * @param cDDemandesCDEtape cDDemandesCDEtape à affecter
     */
    public void setCDDemandesCDEtape(Collection<CDDemandeEntity> cDDemandesCDEtape) {
        CDDemandesCDEtape = cDDemandesCDEtape;
    }

    /**
     * Accesseur de cPEtapesCDEtape
     * 
     * @return le cPEtapesCDEtape
     */
    public Collection<CPEtapeEntity> getCPEtapesCDEtape() {
        return CPEtapesCDEtape;
    }

    /**
     * Affectation de cPEtapesCDEtape
     * 
     * @param cPEtapesCDEtape cPEtapesCDEtape à affecter
     */
    public void setCPEtapesCDEtape(Collection<CPEtapeEntity> cPEtapesCDEtape) {
        CPEtapesCDEtape = cPEtapesCDEtape;
    }

}
